const XLSX = require('xlsx');
const path = require('path');
const bcrypt = require('bcrypt');
const fs = require('fs');

async function addOrUpdateUser(username, password) {
  try {
    // 确保 data 目录存在
    const dataDir = path.join(__dirname, '..', 'data');
    if (!fs.existsSync(dataDir)) {
      fs.mkdirSync(dataDir);
    }

    const filePath = path.join(dataDir, 'user.xlsx');
    let users = [];

    // 如果文件存在，读取现有用户
    if (fs.existsSync(filePath)) {
      const workbook = XLSX.readFile(filePath);
      const sheet = workbook.Sheets[workbook.SheetNames[0]];
      users = XLSX.utils.sheet_to_json(sheet);
    }

    // 查找用户是否存在
    const userIndex = users.findIndex(user => user.username === username);
    const hashedPassword = await bcrypt.hash(password, 10);

    if (userIndex === -1) {
      // 添加新用户
      users.push({
        username,
        password: hashedPassword
      });
      console.log('新用户添加成功！');
      console.log('用户名:', username);
      console.log('密码:', password, '(请记住这个密码，它将用于登录)');
    } else {
      // 更新现有用户密码
      users[userIndex].password = hashedPassword;
      console.log('用户密码更新成功！');
      console.log('用户名:', username);
      console.log('新密码:', password, '(请记住这个密码，它将用于登录)');
    }

    // 创建新的工作簿
    const workbook = XLSX.utils.book_new();
    const worksheet = XLSX.utils.json_to_sheet(users);
    XLSX.utils.book_append_sheet(workbook, worksheet, 'Users');

    // 写入文件
    XLSX.writeFile(workbook, filePath);
    console.log('\nExcel文件保存在:', filePath);
    console.log('当前用户列表:', users.map(u => u.username));
  } catch (error) {
    console.error('操作失败:', error);
    console.error('错误详情:', error.stack);
  }
}

// 从命令行参数获取用户名和密码
const [username, password] = process.argv.slice(2);
if (!username || !password) {
  console.log('使用方法: node addUser.js <用户名> <密码>');
  console.log('例如: node addUser.js admin 123456');
} else {
  addOrUpdateUser(username, password);
} 